package org.jeecg.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.handler.IFillRuleHandler;


/**
 * 规则值自动生成工具类
 *
 * @author qinfeng
 * @举例： 自动生成订单号；自动生成当前日期
 */
@Slf4j
public class FillRuleUtil {

	/**
	 * @param ruleCode ruleCode
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static Object executeRule(String ruleCode, JSONObject formData) {
		if (!StringUtils.isEmpty(ruleCode)) {
			try {
				// 获取 Service
				ServiceImpl impl = (ServiceImpl) SpringContextUtils.getBean("sysFillRuleServiceImpl");
				// 根据 ruleCode 查询出实体
				QueryWrapper queryWrapper = new QueryWrapper();
				queryWrapper.eq("rule_code", ruleCode);
				JSONObject entity = JSON.parseObject(JSON.toJSONString(impl.getOne(queryWrapper)));
				if (entity == null) {
					log.warn("填值规则：" + ruleCode + " 不存在");
					return null;
				}
				// 获取必要的参数
				String ruleClass = entity.getString("ruleClass");
				JSONObject params = entity.getJSONObject("ruleParams");
				if (params == null) {
					params = new JSONObject();
				}
				if (formData == null) {
					formData = new JSONObject();
				}
				// 通过反射执行配置的类里的方法
				IFillRuleHandler ruleHandler = (IFillRuleHandler) Class.forName(ruleClass).newInstance();
				return ruleHandler.execute(params, formData);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}
